#pragma once

EXTERN_C HRESULT GetComObject(CLSID clsid, IID iid, void** ppvod);

EXTERN_C __declspec(dllimport) const GUID CLSID_ANIMALS;
EXTERN_C __declspec(dllimport) const IID IID_IDog;
EXTERN_C __declspec(dllimport) const IID IID_ICat;
EXTERN_C __declspec(dllimport) const IID IID_IPig;

struct IDog : public IUnknown
{
public:
    virtual HRESULT STDMETHODCALLTYPE Woof(
        /* [in] */ const unsigned char* lpString) = 0;

};

struct ICat : public IUnknown
{
public:
    virtual HRESULT STDMETHODCALLTYPE Meow(
        /* [in] */ const unsigned char* lpString) = 0;

};

struct IPig: public IUnknown
{
public:
    virtual HRESULT STDMETHODCALLTYPE Oink(
        /* [in] */ const unsigned char* lpString) = 0;

};
